In many network communication applications, multiple network servers are operated in parallel to increase the amount of network communication traffic the system can handle. For instance, it is common for a site on the World-Wide Web on the Internet to employ a cluster of network servers to ensure that its web pages can be browsed by a large number of computers on the Internet at the same time.
In a system employing a cluster of network servers, an incoming communication packet received from the network is typically passed through a hardware switch, which directs the packet to all of the servers in the cluster. The servers are connected by a private network, over which the servers communicate and assign responsibility for each new request that comes in over the hardware switch. The communications among the servers allow them to cooperate to handle fail-over and load balancing operations. In one scenario, “fail-over” means that when the physical connection between the switch and a server fails, the connection failure is detected by the server, and its work is taken up by the other servers with good connections. “Load-balancing,” on the other hand, means that when a server is already busy, further communication packets that originally would be handled by that server will be handled by the other servers that are available.
In order to ensure that the fail-over and load-balancing mechanisms are properly implemented in the network servers, the provider of the server software has to put the servers under test conditions and monitor the behavior of the servers. For instance, to test the fail-over mechanism, the server software provider has to create connection failure conditions and observe whether the servers can detect a failed connection and cause communication packets to be handled by other servers with good connections. Such tests, however, have been difficult to perform using existing network switches. Conventional network switches, which are hardware-based, do not lend themselves to flexible, automated, server testing. In order to generate connection failure conditions for testing the fail-over operation, the tester has to physically disconnect and reconnect the cables connecting the network switch and the servers being tested. Such manual operation is not only tedious and time consuming but also prone to errors. Moreover, it is also difficult to monitor communications passing through a conventional hardware-based network switch for the purpose of determining whether the servers have achieved effective load balancing.